/**
 * Copyright (c) 2023 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Autogenerated file -- DO NOT EDIT!

% instructions = Panda::instructions.select{ |b| b.namespace == "ets" && b.intrinsic_name }
% if instructions.first
%   instructions = instructions.group_by(&:intrinsic_name)
% end
% instructions.each do |intrinsic_name, group|
%     inst = group.first
%     next unless inst.sig.include?(".name")
%     params_arr = inst.operands
%     if inst.intrinsic_name.class == Array
%       inst.intrinsic_name.each do | intrinsic_name |
        case compiler::RuntimeInterface::IntrinsicId::<%= intrinsic_name %>:
%       end
%     else
        case compiler::RuntimeInterface::IntrinsicId::<%= intrinsic_name %>:
%     end
        {
%     if inst.acc_read?
            auto acc_src = inst->GetSrcReg(1U);
            if (acc_src != compiler::ACC_REG_ID) {
                DoLda(acc_src, enc->result_);
            }
%     end
%     params_arr.each do |param|
%       if param.reg?
            auto v0 = inst->GetSrcReg(0);
%       elsif param.id?
%         if inst.properties.include?("field_id")
            ASSERT(inst->HasImms() && inst->GetImms().size() > 0); // NOLINT(readability-container-size-empty)
            auto ir_id0 = static_cast<uint32_t>(inst->GetImms()[0]);
            auto bc_id0 = enc->ir_interface_->GetFieldIdByOffset(ir_id0);
%         end
%       end
%     end
            enc->result_.emplace_back(pandasm::Create_<%= inst.asm_token %>(v0, bc_id0));
%     if inst.acc_write?
            auto acc_dst = inst->GetDstReg();
            if (acc_dst != compiler::ACC_REG_ID) {
                DoSta(acc_dst, enc->result_);
            }
%     end
            break;
        }
% end
